﻿using AiMachineControl.Model;

namespace AiMachineControl.IService
{
    /// <summary>
    /// 命令处理操作接口
    /// </summary>
    public interface ICommandProcessService
    {
        /// <summary>
        /// 离线渲染,直接通过选定的模型渲染
        /// </summary>
        /// <param name="AiType">渲染类型</param>
        /// <param name="UseLogId">算力机使用记录</param>
        /// <param name="OffLineInfo">渲染类型</param>
        /// <param name="aiSoftDosArr">Ai处理软件命令集合</param>
        /// <param name="Message">返回消息</param>
        bool StartOfflineProject(string AiType,int UseLogId, OffLineInfo offLineInfo, string aiSoftDosArr, out string Message);

        /// <summary>
        /// 实时渲染，根据项目版本号和本地文件匹配，如果一致，直接启动，不一致先下载最新的模型文件至本地，再启动
        /// </summary>
        /// <param name="AiType">模型类型</param>
        /// <param name="proName">项目名</param>
        /// <param name="VersionNo">模型项目版本号</param>
        /// <param name="IsFirstRun">是否初次运行</param>
        /// <param name="aiSoftDosArr">Ai处理软件命令集合</param>
        /// <param name="Message">返回消息</param>
        bool ReadingProjectInfo(int tUseLogId, int AiType, string proName, string VersionNo, bool IsFirstRun, string aiSoftDosArr,out string Message);

        /// <summary>
        /// 拆分音频数据
        /// </summary>
        /// <param name="tUseLogId">算力机使用记录</param>
        /// <param name="avfId">数字人Id</param>
        /// <param name="proName">项目名</param>
        /// <param name="file">wav文件地址</param>
        /// <param name="aiSoftDos">Ai处理软件命令集合</param>
        bool SpliteWavs(int tUseLogId,int avfId, string proName, string file, string aiSoftDos);

        /// <summary>
        /// 合成视频数据
        /// </summary>
        /// <param name="tUseLogId">算力机使用记录</param>
        /// <param name="proName">项目名</param>
        /// <param name="combinfo">合成信息</param>
        /// <param name="aiSoftDos">调用命令</param>
        bool CombineVideo(int tUseLogId, string proName, VideoCombine combinfo, string aiSoftDos);

        /// <summary>
        /// 更新本算力机指定项目，更新至最新版本
        /// </summary>
        /// <param name="AiType">模型类型</param>
        /// <param name="proName">项目名</param>
        /// <param name="VersionNo">模型项目版本号</param>
        bool UpdateProjectInfo(int AiType, string proName, string VersionNo);
    }
}
